1. Technical Field
The present invention relates to a method and apparatus for code size reduction.
2. Related Art
In computer science, program optimization or software optimization is a process of modifying a software program to work more efficiently or use fewer resources. Normally, after being optimized, a computer program can execute commands more rapidly, operate with less memory storage or other resources, or consume less power.
A compiler is a computer program that transforms a source code written in a high-level computer language into a low-level computer language. Usually, a compiler comprises three main parts: the front-end, the middle-end, and the back-end. The front-end parses a text-based programming language into an intermediate representation (IR) of the source code for the middle-end; the middle-end performs optimizations on the IR and generates another IR for the back-end; and the back-end translates the IR from the middle-end into an assembly code.
Many compiler optimization techniques have been developed to reduce the size of generated codes, and one such technique is known as procedural abstraction. Procedural abstraction identifies repeated segments of code, and then extracts the repeated segments of code to construct a subroutine and replace other repeated segments by procedural calls to the newly created subroutine. As a result, the size of the code can be reduced.
Conventional procedural abstraction techniques are not perfect. In some circumstances, code size reduction between a non-optimized IR code and an optimized IR code is greater than that between the object code generated from a non-optimized IR code and the object code generated from an optimized IR code.